package de.wbh.gwt.form.layouter.java.server.servlet;

import java.io.File;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import de.wbh.gwt.form.layouter.java.server.ConfigurationHelper;
import de.wbh.gwt.form.layouter.shared.rpc.AvailableFileService;

/**
 * Implementierung von {@link AvailableFileService} Es werden Funktionen bereitstellt um Listen der Namen der vorhandenen efd- und pdf-Dateien auf dem Server abzufragen
 * 
 * 
 * @author Jenny
 * 
 */

public class AvailableFileServlet extends RemoteServiceServlet implements AvailableFileService {

	/**
	 * generierte Id
	 */
	private static final long serialVersionUID = 4603956026464439089L;
	String home = ConfigurationHelper.getInstance().getHomeDirectory();

	/**
	 * Liefert eine Liste der Namen der auf dem Server vorhandenen efd-Dateien. Die Liste ist aufsteigend sortiert
	 */
	@Override
	public ArrayList<String> getAvailableEfdFiles() {
		return getFiles("efd");
	}

	/**
	 * Liefert eine Liste der Namen der auf dem Server vorhandenen pdf-Dateien. Die Liste ist aufsteigend sortiert.
	 */
	@Override
	public ArrayList<String> getAvailablePdfFiles() {
		return getFiles("pdf");
	}

	private ArrayList<String> getFiles(String typ) {
		File homeFile = new File(this.home, typ);
		if (homeFile.exists()) {
			File[] files = homeFile.listFiles();
			if (files.length > 0) {
				ArrayList<String> resultList = new ArrayList<String>(files.length);
				for (File file : files) {
					String filname;
					int pos = file.getName().lastIndexOf(".");
					if (pos == -1) {
						filname = file.getName();
					} else {
						filname = file.getName().substring(0, pos);
					}
					resultList.add(filname);
				}
				Collections.sort(resultList, Collator.getInstance());
				return resultList;
			}
		}
		return new ArrayList<String>(0);
	}

}
